// app application 应用程序
// 把静态资源存放在public里面

var http = require('http')
var fs = require('fs')
var template = require('art-template')
var url = require('url')

var comments = [
    {
        name:'绿绿',
        message:'绿绿喜欢吃泡泡',
        datetime:'2020-9-9'
    },
    {
        name:'红红',
        message:'红红喜欢吃果果',
        datetime:'2020-9-9'
    },
    {
        name:'墨小红',
        message:'喜欢吃泡泡',
        datetime:'2020-9-9'
    },
    {
        name:'曲小绿',
        message:'喜欢和墨小红在一起',
        datetime:'2020-9-9'
    },
    {
        name:'sandy',
        message:'今天也要好好学习',
        datetime:'2020-9-9'
    }
]

// /pinglun?name=精神可嘉&message=的点击hi
// 对于这种表单提交的请求路径，由于其中具有用户动态填写的内容
// 所以你不可能通过去判断完整的url路径来处理这个请求
// 结论：对于我们来讲，其实只需要判定，如果您的请求路径是 /pinglun的时候，那我就认为你要提交表单数据


http
    .createServer(function(req,res){
        // 使用url.parse方法将路径解析成为一个方便操作的对象，第二个参数为true表示直接将查询字符串转为一个对象（通过query属性来访问）
        var parseObj = url.parse(req.url,true)
        // 单独获取不包含查询字符串的路径部分（该部分不包含？之后的内容）
        var pathname = parseObj.pathname
        // var url = req.url
        if(pathname === '/'){
            fs.readFile('./views/index.html',function(err,data){
                if(err){
                    return res.end('404 not fonud')
                }
                var htmlStr = template.render(data.toString(),{
                    comments:comments
                })
                res.end(htmlStr)
            })
        }else if(pathname === '/post'){
            fs.readFile('./views/post.html',function(err,data){
                if(err){
                    return res.end('404 not found')
                }
                res.end(data)
            })
        }
        else if(pathname.indexOf('/public/')===0){
            // /public/css/main.css
            // /public/css/main.js
            // 统一处理：
            //    如果请求路径是以/public/开头的，则我认为你要获取public中的某个资源
            // 所以我们就直接可以把请求路径当做文件路径来直接进行读取
            // 那些资源能被用户访问，那些资源不能被用户访问，现在可以通过代码来进行非常灵活的操作
            fs.readFile('.' + pathname,function(err,data){
                if(err){
                    return res.end('404 not found')
                }
                res.end(data)
            })
        }else if(pathname === '/pinglun'){
            // 这个时候无论/pinglun/xxx之后是什么，都不用管了
            // console.log('收到表单请求了',parseObj.query)
            // res.end(JSON.stringify(parseObj.query))
            // 我们已经使用url模块的parse方法把请求路径中的查询字符串给解析成一个对象
            // 接下来要做的是：
                // 1、获取表单提交的数据 parseObj.query
                // 2、生成日期到数据对象中，然后存储到数组中
                // 3、让用户重定向跳转到首页 /
                //    当用户重新请求 / 的时候，数组中的数据以及发生了变化，所以用户看到的页面也发生了变化
            var comment = parseObj.query
            var d = new Date()
            comment.datetime = d.toLocaleDateString()
            // comments.push(comment)
            comments.unshift(comment)   //往前面插入
            // 服务器这个时候已经把数据存储好了，接下来就是让用户重新请求 / 首页，就可以看到新的数据了
            // 如何通过服务器让客户重定向？
                // 1、状态码设置为302临时重定向---statusCode
                // 2、在响应头中通过location告诉客户端往哪重定向---setHeader
            // 如果客户端发现收到的服务器的响应的状态码是302就会自动去响应头中找Location ，然后对该地址发起新的请求
            // 所以你就能看到客户端自动跳转了   
            res.statusCode = 302
            res.setHeader('Location','/')
            res.end()
        }
        else{
            // 其他的都处理成404
            fs.readFile('./views/404.html',function(err,data){
                if(err){
                    return res.end('404 not found')
                }
                res.end(data)
            })
        }
    })
    .listen(3000,function(){
        console.log('running...')
    })